package cn.zxone.feishu.demo.common.properties;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.Map;

/**
 * <p>
 *   飞书应用配置参数
 * </p>
 * @author zhangxue
 * @since 2025-04-09 11:16:36
 */
@Data
@Configuration
@ConfigurationProperties(prefix = FeiShuProperties.PREFIX)
public class FeiShuProperties {

    /**
     * 配置前缀
     */
    public static final String PREFIX = "feishu";

    /**
     * 是否启用
     */
    private boolean enable = false;

    /**
     * 设置httpclient 超时时间，默认60秒
     */
    private long requestTimeout = 60L;

    /**
     * 是否打印请求日志
     */
    private boolean logReqAtDebug = false;

    /**
     * 是否禁用 Token 缓存
     */
    private boolean disableTokenCache = false;

    /**
     * 设置Token缓存器（默认实现为内存）：memory、redis
     */
    private String tokenCache;

    /**
     * 应用配置 MAP，key：应用别名，value：应用配置
     */
    private Map<String, AppConfig> appConfigs;


    /**
     * <p>
     * 应用配置
     * </p>
     */
    @Getter
    @Setter
    public static class AppConfig {

        /**
         * 应用别名
         */
        private String appAlias;

        /**
         * 应用中文名称
         */
        private String appName;

        /**
         * 应用ID
         */
        private String appId;

        /**
         * 应用密钥
         */
        private String appSecret;

        /**
         * 服务台应用ID，仅在调用服务台业务的 API 时需要配置
         */
        private String helpDeskId;

        /**
         * 服务台应用密钥，仅在调用服务台业务的 API 时需要配置
         */
        private String helpDeskToken;

        /**
         * 应用类型是否为商店应用
         */
        private boolean marketplaceApp = false;

        /**
         * 加密策略
         * 用于加密事件或回调的请求内容，校验请求来源。当订阅方式为“将事件发送至开发者服务器”或“将回调发送至开发者服务器”时生效
         */
        private String encryptKey;

        /**
         * 验证 Token
         */
        private String verificationToken;

        /**
         * 事件配置，订阅模式：NO-不订阅、WS-基于webSocket订阅、WEBHOOK-基于webhook订阅
         */
        private String eventMode = "NO";

        /**
         * 回调配置，订阅模式：NO-不订阅、WS-基于webSocket订阅、WEBHOOK-基于webhook订阅
         */
        private String callbackMode = "NO";
    }

}
